﻿#define  _CRT_SECURE_NO_WARNINGS 1
//1.写⼀个函数Strlen，可以求字符串⻓度，除了函数的形参，函数中不能使⽤多余的变量。
//输⼊⼀个字符串（字符串⻓度⼩于等于30，中间不包含空格），使⽤Strlen函数可以求字符串的⻓
//度，并返回。
//注：字符串的结束标志是 \0 .
#include <stdio.h>

// 函数递归
// 函数形参const char* str - 指向字符串的指针，const修饰表示不修改字符串内容
// 返回值:int - 字符串长度（不包含结束符"\0"）
//int Strlen(const char* str)
//{
//	// 递归结束条件
//	// 字符串指针整型空字符结束递归
//	if (*str == '\0')
//		return 0; // 此时字符串长度为0
//	else
//		// 递归逻辑：当前字符计入长度（+1），再加入后续字字符串长度
//		// str + 1表示指针向后移动一位，指向当前字符的下一个字符
//		return 1 + Strlen(str + 1);
//}
//int main()
//{
//	// 定义数组存储字符串
//	char arr[31] = { 0 };
//	// 输入字符串 ：%[^\n]s表示读取除换行符外的所有字符（含空格）
//	// 存入arr数组
//	scanf("%[^\n]s", arr);
//	// 获取字符串长度 调用函数
//	int len = Strlen(arr);
//	printf("%d\n", len);
//	return 0;
//}




//2.输⼊⼀个字符串，写⼀个函数将⼀个字符串的内容逆序过来。（自定义一个函数）
#include <string.h>

//void reverse(char* str)
//{
//	// 利用库函数求得字符串长度
//	int len = strlen(str);
//		// 定义两个字符串指针分别指向字符串首位和末位
//		char* left = str;
//		char* right = str + len - 1; // (str+len指向结束符，-1后指向最后一个字符)
//		// 当左指针在右指针左边时，进行交换（未相遇和交叉）
//		while (left < right)
//		{
//			// 交换left 和right 指向的字符
//			char tmp = *left; // 临时保存左指针指向的字符
//			*left = *right;  // 右指针放到左指针
//			*right = tmp;  // 临时保存的左字符放到右指针的位置
//
//			// 两个指针同时相向移动一位
//			left++;
//			right--;
//		}
//}
//int main()
//{
//	// 创建数组存储字符串
//	char arr[31] = { 0 };
//	// 输入字符串  %[^\n]s  表示读取换行符前面的所有字符 s可以省略
//	scanf("%[^\n]s", arr);
//
//	// 对字符串排序
//	reverse(arr);
//	printf("%s\n", arr);
//	return 0;
//}




//3.输⼊⼀个整数m，求这个整数m的每⼀位之和，并打印。 （自定义一个函数）
//int digit_sum(int m)
//{
//	// 定义变量记录每一位的和
//	int s = 0;
//	// 当前数还不为0，获取其个位数加到s中
//	while (m)
//	{
//		s += m % 10; // 得到个位数  s = s + m%10
//		// 删除其个位数
//		m /= 10;  // m = m/10 将变量m的值除以10，再赋给m
//		// 返回各位数字之和
//	}
//	return s;
//}
//
//int main()
//{
//	int m = 0;
//	// 输入
//	scanf("%d", &m);
//	// 调用函数
//	int ret = digit_sum(m);
//	printf("%d\n", ret);
//	return 0;
//}